package components

import (
	"fmt"
	"html/template"
	"strings"
)

// TemplateFuncs 模板函数映射
// 提供模板中可用的自定义函数
var TemplateFuncs = template.FuncMap{
	"ShowMonthDay": ShowMonthDay, // 获取datetime数据的月日
	"GetYear":      GetYear,      // 获取datetime数据的年
	"ShowSiteCFG":  ShowSiteCFG,  // 获取配置的value
	"Unescaped":    Unescaped,    // 转义
	"Pager":        Pager,        // 数据分页
	"subtract":     Subtract,     // 减法运算
	"add":          Add,          // 加法运算
	"sequence":     Sequence,     // 生成序列
	"default":      Default,      // 默认值函数
}

// ShowMonthDay 获取datetime数据的月日
// dataTime: 时间字符串，格式为"2006-01-02 15:04:05"
func ShowMonthDay(dataTime string) string {
	if len(dataTime) < 10 {
		return ""
	}
	return dataTime[5:7] + "." + dataTime[8:10]
}

// GetYear 获取datetime数据的年
// dataTime: 时间字符串，格式为"2006-01-02 15:04:05"
func GetYear(dataTime string) string {
	if len(dataTime) < 4 {
		return ""
	}
	return dataTime[:4]
}

// ShowSiteCFG 获取配置的value
// key: 配置键名
func ShowSiteCFG(key string) template.HTML {
	// 这里需要从配置中获取数据，暂时返回空字符串
	// 后续可以通过依赖注入或其他方式获取配置数据
	return template.HTML("")
}

// Unescaped 转义HTML内容
// x: 要转义的字符串
func Unescaped(x string) interface{} {
	return template.HTML(x)
}

// Pager 数据分页
// pagenumber: 当前页码，pagecount: 总页数，baseUrl: 基础URL
func Pager(pagenumber, pagecount int, baseUrl string) template.HTML {
	if pagecount <= 1 {
		return template.HTML("")
	}

	htmlArr := []string{}
	htmlArr = append(htmlArr, `<div class="pager">`)

	if pagenumber > 1 {
		htmlArr = append(htmlArr, renderButton("首页", pagenumber, pagecount, baseUrl))
		if pagenumber > 2 {
			htmlArr = append(htmlArr, renderButton("上一页", pagenumber, pagecount, baseUrl))
		}
	}

	// 显示页码
	start := pagenumber - 2
	if start < 1 {
		start = 1
	}
	end := pagenumber + 2
	if end > pagecount {
		end = pagecount
	}

	for i := start; i <= end; i++ {
		if i == pagenumber {
			htmlArr = append(htmlArr, fmt.Sprintf(`<span class="current">%d</span>`, i))
		} else {
			htmlArr = append(htmlArr, renderButton(fmt.Sprintf("%d", i), i, pagecount, baseUrl))
		}
	}

	if pagenumber < pagecount {
		htmlArr = append(htmlArr, renderButton("下一页", pagenumber, pagecount, baseUrl))
		if (pagecount - pagenumber) > 1 {
			htmlArr = append(htmlArr, renderButton("末页", pagenumber, pagecount, baseUrl))
		}
	}

	htmlArr = append(htmlArr, `            </div>`)
	return template.HTML(strings.Join(htmlArr, "\n"))
}

// renderButton 渲染分页按钮
// text: 按钮文本，page: 页码，pagecount: 总页数，baseUrl: 基础URL
func renderButton(text string, page, pagecount int, baseUrl string) string {
	if page < 1 || page > pagecount {
		return ""
	}

	url := baseUrl
	if strings.Contains(baseUrl, "?") {
		url = fmt.Sprintf("%s&page=%d", baseUrl, page)
	} else {
		url = fmt.Sprintf("%s?page=%d", baseUrl, page)
	}

	return fmt.Sprintf(`<a href="%s">%s</a>`, url, text)
}

// Subtract 减法运算
// a: 被减数，b: 减数
func Subtract(a, b int) int {
	return a - b
}

// Add 加法运算
// a: 加数，b: 加数
func Add(a, b int) int {
	return a + b
}

// Default 默认值函数
// value: 要检查的值，defaultValue: 默认值
func Default(value interface{}, defaultValue interface{}) interface{} {
	if value == nil || value == "" {
		return defaultValue
	}
	return value
}

// GetTemplateFuncs 获取模板函数映射
func GetTemplateFuncs() map[string]interface{} {
	return TemplateFuncs
}
